package com.jsmtr.rms.utils;

import com.jsmtr.rms.utils.smsutil.SmsUtil;
import com.jsmtr.rms.utils.smsutil.message.SubmitFullTextSmsMessage;
import com.jsmtr.rms.utils.smsutil.message.SubmitFullTextSmsRespMessage;
import net.sf.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.*;

/**
 *短信API服务调用示例代码 － 华堂
 *在线接口文档：http://www.cqhuatang.com
 **/

public class MsgUtils {
    public static final String DEF_CHATSET = "UTF-8";
    public static final int DEF_CONN_TIMEOUT = 30000;
    public static final int DEF_READ_TIMEOUT = 30000;

    //配置您申请的KEY
    public static final String APPKEY ="458617";


    /**
     * 向指定URL发???GET方法的请??
     *
     * @param url
     *            发???请求的URL
     * @param param
     *            请求参数，请求参数应该是 name1=value1&name2=value2 的形式???
     * @return URL ??代表远程资源的响应结??
     */
    public static String sendGet(String url, String param) {
        String result = "";
        BufferedReader in = null;
        try {
            String urlNameString = url + "?" + param;
            URL realUrl = new URL(urlNameString);
            // 打开和URL之间的连??
            URLConnection connection = realUrl.openConnection();
            // 设置通用的请求属??
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            connection.setConnectTimeout(DEF_CONN_TIMEOUT);
            connection.setReadTimeout(DEF_READ_TIMEOUT);
            // 建立实际的连??
            connection.connect();
            // 获取??有响应头字段
            Map<String, List<String>> map = connection.getHeaderFields();
            // 遍历??有的响应头字??
            /*for (String key : map.keySet()) {
                System.out.println(key + "--->" + map.get(key));
            }*/
            // 定义 BufferedReader输入流来读取URL的响??
            in = new BufferedReader(new InputStreamReader(
                    connection.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送GET请求出现异常" + e);
            e.printStackTrace();
        }
        // 使用finally块来关闭输入??
        finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        return result;
    }

    /**
     * 向指?? URL 发???POST方法的请??
     *
     * @param url
     *            发???请求的 URL
     * @param param
     *            请求参数，请求参数应该是 name1=value1&name2=value2 的形式???
     * @return ??代表远程资源的响应结??
     */
    public static String sendPost(String url, String param) {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            URL realUrl = new URL(url);
            // 打开和URL之间的连??
            URLConnection conn = realUrl.openConnection();
            // 设置通用的请求属??
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

            conn.setConnectTimeout(DEF_CONN_TIMEOUT);
            conn.setReadTimeout(DEF_READ_TIMEOUT);
            // 发???POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            // 发???请求参??
            out.print(param);
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响??
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送POST请求出现异常"+e);
            e.printStackTrace();
        }
        //使用finally块来关闭输出流???输入流
        finally{
            try{
                if(out!=null){
                    out.close();
                }
                if(in!=null){
                    in.close();
                }
            }
            catch(IOException ex){
                ex.printStackTrace();
            }
        }
        return result;
    }



    /**
     * 生成随机验证码
     * @param lenth 位数
     * @return
     */
    public static String getRandom(int lenth){
        String sources = "0123456789"; // 加上一些字母，就可以生成pc站的验证码了
        Random rand = new Random();
        StringBuffer flag = new StringBuffer();
        for (int j = 0; j < lenth; j++)
        {
            flag.append(sources.charAt(rand.nextInt(9)) + "");
        }
        return  flag.toString();
    }

    public static String getValidCodeInfo(int length){
        String vcode=getRandom(length);
        return  "【重庆市铁路(集团)有限公司】您的验证码为："+vcode+",请勿泄露给他人，若非本人操作，请忽略此信息。";
    }

    public static String getValidCodeInfo(String  vcode){

        return  "【重庆市铁路(集团)有限公司】您的验证码为："+vcode+",请勿泄露给他人，若非本人操作，请忽略此信息。";
    }

    public static String getPasswdInfo(String  vcode){

        return  "【重庆市铁路(集团)有限公司】招聘系统登录密码："+vcode+",请登录后及时修改，若非本人操作，请忽略此信息。";
    }

    //2.发送短信验证码
    public static String senValidCode(String mobile,String vcode){
        String result =null;
        //SubmitFullTextSmsMessage smsMessage=new SubmitFullTextSmsMessage();
        //String url ="http://cqhuatang.com/SMSServer/sendFullTextSms";//请求接口地址
        String url ="http://cqhuatang.com/SMSServer/smssend";//请求接口地址
        try {
            Map params = new HashMap();//请求参数
            params.put("phone",mobile);//接收短信的手机号码
            params.put("appkey","458617");//短信模板ID，请参考个人中心短信模板设置
            params.put("appsecret","zjNFfZ");
            params.put("templateid","1601198233812NdZ");
            params.put("extnum","2029");
            ArrayList tp=new ArrayList();
            tp.add(vcode);
            params.put("templateparams",tp);
            //System.out.printf(vcode);
            //params.put("tpl_value",URLEncoder.encode("#code#=" + vcode,"UTF-8"));//变量名和变量值对。如果你的变量名或者变量值中带有#&=中的任意一个特殊符号，请先分别进行urlencode编码后再传递，<a href="http://www.juhe.cn/news/index/id/50" target="_blank">详细说明></a>
           // params.put("key",APPKEY);//应用APPKEY(应用详细页查询)
            //params.put("dtype","json");//返回数据的格式,xml或json，默认json

            JSONObject jsonObject=  JSONObject.fromObject(params);
            String str=jsonObject.toString();
            //System.out.println(str);
            result=sendPost(url, str);
           // result =net(url, params, "GET");
            System.out.println(result);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    //2.发送短信验证码
    public static String senPwdCode(String mobile,String pwd){
        String result =null;
       // String url ="http://cqhuatang.com/SMSServer/sendFullTextSms";//请求接口地址
        String url ="http://cqhuatang.com/SMSServer/smssend";//请求接口地址
        try {
            Map params = new HashMap();//请求参数
            params.put("phone",mobile);//接收短信的手机号码
            params.put("appkey","458617");//短信模板ID，请参考个人中心短信模板设置
            params.put("appsecret","zjNFfZ");
            params.put("templateid","1601199736561B6A");
            params.put("extnum","2029");
            ArrayList tp=new ArrayList();
            tp.add(pwd);
            params.put("templateparams",tp);
           // System.out.printf(pwd);
            //params.put("tpl_value",URLEncoder.encode("#code#=" + vcode,"UTF-8"));//变量名和变量值对。如果你的变量名或者变量值中带有#&=中的任意一个特殊符号，请先分别进行urlencode编码后再传递，<a href="http://www.juhe.cn/news/index/id/50" target="_blank">详细说明></a>
            // params.put("key",APPKEY);//应用APPKEY(应用详细页查询)
            //params.put("dtype","json");//返回数据的格式,xml或json，默认json

            JSONObject jsonObject=  JSONObject.fromObject(params);
            String str=jsonObject.toString();
            //System.out.println(str);
            result=sendPost(url, str);
            // result =net(url, params, "GET");
            System.out.println(result);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static String sendSMSByTemplate(String mobile){
        String result =null;
        String url ="http://cqhuatang.com/SMSServer/smssend";//请求接口地址
        try {
            Map params = new HashMap();//请求参数
            params.put("phone",mobile);//接收短信的手机号码
            params.put("appkey","458617");//短信模板ID，请参考个人中心短信模板设置
            params.put("appsecret","zjNFfZ");
            params.put("templateid","16043069651697EF");
            params.put("extnum","2029");
            ArrayList tp=new ArrayList();
            tp.add("");
            params.put("templateparams",tp);
            // System.out.printf(pwd);
            //params.put("tpl_value",URLEncoder.encode("#code#=" + vcode,"UTF-8"));//变量名和变量值对。如果你的变量名或者变量值中带有#&=中的任意一个特殊符号，请先分别进行urlencode编码后再传递，<a href="http://www.juhe.cn/news/index/id/50" target="_blank">详细说明></a>
            // params.put("key",APPKEY);//应用APPKEY(应用详细页查询)
            //params.put("dtype","json");//返回数据的格式,xml或json，默认json

            JSONObject jsonObject=  JSONObject.fromObject(params);
            String str=jsonObject.toString();
            result=sendPost(url, str);
            System.out.println(result);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static String sendSMSByTemplate(String mobile,String tempnid){
        String result =null;
        String url ="http://cqhuatang.com/SMSServer/smssend";//请求接口地址
        try {
            Map params = new HashMap();//请求参数
            params.put("phone",mobile);//接收短信的手机号码
            params.put("appkey","458617");//短信模板ID，请参考个人中心短信模板设置
            params.put("appsecret","zjNFfZ");
            params.put("templateid",tempnid);
            params.put("extnum","2029");
            ArrayList tp=new ArrayList();
            tp.add("");
            params.put("templateparams",tp);
            // System.out.printf(pwd);
            //params.put("tpl_value",URLEncoder.encode("#code#=" + vcode,"UTF-8"));//变量名和变量值对。如果你的变量名或者变量值中带有#&=中的任意一个特殊符号，请先分别进行urlencode编码后再传递，<a href="http://www.juhe.cn/news/index/id/50" target="_blank">详细说明></a>
            // params.put("key",APPKEY);//应用APPKEY(应用详细页查询)
            //params.put("dtype","json");//返回数据的格式,xml或json，默认json

            JSONObject jsonObject=  JSONObject.fromObject(params);
            String str=jsonObject.toString();
            result=sendPost(url, str);
            System.out.println(result);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    //3.发送内容短信
    public static String sendMsg(String mobile,String content){
        String result =null;
        String url ="http://cqhuatang.com/SMSServer/sendFullTextSms";//请求接口地址
        SubmitFullTextSmsMessage smsMessage=new SubmitFullTextSmsMessage();
        try {

            SubmitFullTextSmsRespMessage result1= SmsUtil.sendSms(url,smsMessage);
            Map params = new HashMap();//请求参数
            params.put("phone",mobile);//接收短信的手机号码
            params.put("appkey","458617");//短信模板ID，请参考个人中心短信模板设置
            params.put("appsecret","zjNFfZ");
            params.put("templateid","");
            params.put("extnum","2029");
            params.put("content",content);

            //params.put("tpl_value",URLEncoder.encode("#code#=" + vcode,"UTF-8"));//变量名和变量值对。如果你的变量名或者变量值中带有#&=中的任意一个特殊符号，请先分别进行urlencode编码后再传递，<a href="http://www.juhe.cn/news/index/id/50" target="_blank">详细说明></a>
            // params.put("key",APPKEY);//应用APPKEY(应用详细页查询)
            //params.put("dtype","json");//返回数据的格式,xml或json，默认json

            JSONObject jsonObject=  JSONObject.fromObject(params);
            String str=jsonObject.toString();
            //System.out.println(str);
            result=sendPost(url, str);
            // result =net(url, params, "GET");
            System.out.println(result);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }


    public static void main(String[] args) {
        //String vcode = getRandom(6);
        //JSONObject object = senValidCode("15683813580",vcode);
       // String  vcode=StringTools.CreateRandom(6);
        //String object=sendSMS("15123338149",vcode);
        //System.out.println(object);
    }
}